package fr.generali.sas.controller.v1_0;

import org.apache.commons.lang.ClassUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;

import fr.generali.sas.model.v1_0.Erreur;

@Controller
public class ExceptionHandledController {
	
	private static final Logger logger = LoggerFactory.getLogger(ExceptionHandledController.class);

//	@ExceptionHandler(IllegalArgumentException.class)
//	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//	public ModelAndView handleException(IllegalArgumentException exception) throws IOException {
//		ModelAndView modelAndView = new ModelAndView();
//		modelAndView.setViewName("jsonView");
//
//		logger.error(exception.getMessage(), exception);
//
//		Erreur erreur = new Erreur();
//		erreur.setCode(ClassUtils.getShortClassName(exception.getClass()));
//		erreur.setMessage(exception.getMessage());
//		modelAndView.addObject(erreur);
//
//		return modelAndView;
//	}

	@ExceptionHandler(Exception.class)
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public ModelAndView handleException(Exception exception)  {
	//public Erreur handleException(Exception exception)  {
	//public @ResponseBody Erreur handleException(Exception exception)  {
		//a revoir car dans ce cas, il ne peut y avoir de exception JPA ou BDD mais metier => définition d'une exception SAS ?

		logger.error(exception.getMessage(), exception);

		Erreur erreur = new Erreur();
		erreur.setCode(ClassUtils.getShortClassName(exception.getClass()));
		erreur.setMessage(exception.getMessage());
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("error");
		modelAndView.addObject(erreur);
		return modelAndView;

		//return erreur;
	}

}
